페이지 테이블
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
페이지 테이블은 가상 메모리를 사용하는 운영체제에서 가상 주소를 물리 주소로 변환하는 정보를 저장하는 자료 구조이다. 프로세스가 메모리 내 데이터에 접근할 때, 페이지 테이블은 가상 주소를 실제 메모리 주소로 매핑하며, 각 매핑은 페이지 테이블 항목(PTE)으로 저장된다. 페이지 테이블은 TLB 미스 시 페이지 워크를 통해 주소 매핑을 찾고, 페이지 폴트 발생 시 페이지를 물리 메모리로 가져오는 역할을 한다. 페이지 테이블의 종류에는 역 페이지 테이블, 다단계 페이지 테이블, 가상화 페이지 테이블 등이 있다.
더 읽어볼만한 페이지
- 가상 메모리 - 메모리 관리 장치
메모리 관리 장치(MMU)는 가상 주소를 물리 주소로 변환하여 메모리 접근을 관리하고 보호하는 하드웨어 장치로서, 가상 메모리 시스템에서 독립적인 가상 주소 공간을 제공하고 불법적인 메모리 접근을 차단하며, 페이지 테이블을 통해 외부 단편화 문제를 완화하고 트랜슬레이션 룩어사이드 버퍼(TLB)로 주소 변환 속도를 향상시킨다. - 가상 메모리 - 가상 주소 공간
가상 주소 공간은 운영 체제가 프로세스에 제공하는 논리적인 메모리 공간으로, 실제 물리 메모리 주소와 독립적으로 관리되며, 프로세스는 이 공간을 통해 실행 파일, DLL 파일, 페이지 파일 등을 매핑하고 메모리를 할당받는다. - 운영체제 기술 - 프로세스
프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로, 운영 체제가 시스템 자원을 효율적으로 관리하며 멀티태스킹 환경에서 독립적인 실행 흐름을 유지한다. - 운영체제 기술 - 커널 (컴퓨팅)
커널은 운영 체제의 핵심으로, 하드웨어와 소프트웨어 간 상호 작용을 관리하며 시스템 보안, 자원 관리, 하드웨어 추상화, 프로세스 스케줄링, 프로세스 간 통신, 다중 작업 환경 지원 등의 기능을 제공하고, 모놀리식, 마이크로, 혼합형 커널 등으로 구현되며 가상화 및 클라우드 컴퓨팅 환경에서 중요성이 커지고 있다.
페이지 테이블 |
---|
2. 페이지 테이블의 역할
페이지 테이블은 가상 메모리를 사용하는 운영 체제에서 프로세스가 사용하는 가상 주소를 실제 데이터가 저장된 물리 주소로 변환하는 역할을 한다. 각 프로세스는 자신만의 가상 주소 공간을 가지며, 페이지 테이블은 이러한 가상 주소 공간과 물리 메모리 간의 매핑 정보를 저장한다.[1][2]
페이지 테이블의 각 항목(PTE, Page Table Entry)은 가상 페이지와 물리 프레임을 연결하며, 접근 권한, 변경 여부 등 추가 정보를 포함한다. PTE는 일반적으로 다음과 같은 필드를 포함한다.[1][2]
- 페이지 기본 주소(Page base address)
- 플래그 비트
- 접근 비트(Accessed bit): 페이지에 대한 접근 여부를 나타낸다.
- 변경 비트(Dirty bit): 페이지 내용의 변경 여부를 나타낸다.
- 존재 비트(Present bit): 현재 페이지에 할당된 프레임이 있는지 여부를 나타낸다.
- 읽기/쓰기 비트(Read/Write bit): 읽기/쓰기 권한을 표시한다.
2. 1. 가상 주소와 물리 주소
운영 체제는 가상 메모리를 사용하여, 프로세스가 실제 물리 메모리보다 더 큰 연속적인 메모리 공간에서 작업하는 것처럼 보이게 한다. 실제로는 프로세스의 메모리가 물리적 메모리의 여러 영역에 분산되어 있거나, 솔리드 스테이트 드라이브(SSD)와 같은 보조 저장 장치로 이동(페이징)되었을 수 있다.[1][2]프로세스가 메모리 접근을 요청하면, 운영 체제는 프로세스가 제공하는 가상 주소를 실제 데이터가 저장된 물리적 주소로 변환한다. 이때 페이지 테이블이 사용되는데, 가상 주소와 물리 주소 간의 매핑 정보를 저장한다. 각 매핑은 페이지 테이블 항목(PTE)이라고도 불린다.[1][2]
32비트 워드 길이의 컴퓨터에서 가상 주소 범위는 0x00000000부터 0xFFFFFFFF까지 4GiB이다. 이 범위가 가상 주소 공간이 된다. 가상 메모리를 사용하지 않으면, 물리 메모리가 16MiB뿐인 경우 0x01000000 이상의 주소는 유효하지 않다. 그러나 많은 프로그램은 4GiB 메모리를 한 번에 다 사용하지 않으므로(참조 지역성, 워킹 세트 참조), 가상 메모리를 통해 효율적인 메모리 사용이 가능하다.
4GiB 가상 주소 공간은 일반적으로 4KiB 크기의 "페이지"로 나뉜다. 물리 메모리도 같은 크기의 "프레임"으로 나뉜다. 예를 들어, 프로그램의 텍스트는 가상 주소 0x00000004 (페이지 번호 0x0, 페이지 내 오프셋 0x4)에서 시작하지만, 실제 물리 주소는 0xFF0E0004 (프레임 번호 0xFF0E, 프레임 내 오프셋 0x4)일 수 있다. 가상 메모리 시스템은 페이지를 프레임에 매핑하여 가상 주소를 물리 주소로 변환하며, 페이지 테이블이 이 매핑 정보를 저장한다.
많은 아키텍처는 변환 색인 버퍼(TLB)라는 하드웨어를 통해 가상 메모리를 지원한다. TLB는 페이지와 프레임 매핑을 저장하여 페이지-프레임 변환을 빠르게 처리한다. 그러나 TLB는 제한된 수의 매핑만 저장할 수 있으므로, 페이지 테이블을 사용하여 더 많은 매핑을 소프트웨어적으로 관리한다.
실행 중인 프로그램이 가상 주소 0xD09FBABE에 접근하려 할 때, 이 주소는 페이지 번호(0xD09FB)와 페이지 내 오프셋(0xABE)으로 나뉜다. 하드웨어는 TLB에서 페이지 번호를 검색하여 일치하는 항목이 있으면(TLB 히트) 해당 프레임 번호를 가져와 오프셋을 더해 메모리에 접근한다. 일치하는 항목이 없으면(TLB 미스) 페이지 테이블을 참조한다.
페이지 테이블에서 해당 가상 페이지에 대한 물리 프레임을 찾지 못하면, 페이지 폴트라는 프로세서 인터럽트가 발생한다. 운영 체제는 인터럽트 핸들러를 통해 페이지 폴트를 처리하고, 페이지 테이블에서 매핑을 찾는다. 매핑이 존재하면 TLB에 기록하고 명령을 다시 실행한다.
페이지 테이블 참조가 실패하는 경우는 두 가지이다.
- 해당 주소에 매핑이 없는 경우: 메모리 참조가 잘못된 경우이다. 운영 체제는 세그멘테이션 오류 시그널을 보내는 등 적절한 조치를 취한다.
- 해당 페이지가 물리 메모리에 없는 경우: 페이지 내용이 디스크 등에 저장되어 있는 경우이다. 이 경우, 페이지 내용을 디스크에서 물리 메모리로 가져와야 한다.
물리 메모리에 여유 공간이 없으면, 다른 페이지를 디스크로 내보내고(스왑 아웃) 필요한 페이지를 가져온다(스왑 인). 이 과정을 "스와핑"이라고 하며, 페이지 교체 알고리즘에 따라 어떤 페이지를 스왑할지 결정된다.
페이지 테이블은 설계상 의도된 것은 아니지만, 루트킷으로 조작되어 악성 코드를 숨기는 데 사용될 수 있다.
2. 2. TLB (Translation Lookaside Buffer)
CPU 내부의 메모리 관리 장치(MMU)는 운영 체제의 페이지 테이블에서 최근에 사용된 매핑의 캐시를 저장한다. 이를 TLB(Translation Lookaside Buffer, 변환 색인 버퍼)라고 하며, 이는 연관 캐시이다.가상 주소를 물리 주소로 변환해야 할 때, TLB를 먼저 검색한다. 일치하는 항목이 발견되면, 이를 ''TLB 적중''이라고 하며, 물리 주소가 반환되고 메모리 접근을 계속할 수 있다. 그러나 일치하는 항목이 없으면, ''TLB 미스''라고 하며, MMU, 시스템 펌웨어 또는 운영 체제의 TLB 미스 처리기가 페이지 테이블에서 주소 매핑이 존재하는지 확인한다. 이를 ''페이지 워크''라고 한다. 매핑이 존재하면, TLB에 다시 기록된다. 이는 하드웨어가 가상 메모리 시스템에서 TLB를 통해 메모리에 접근하기 때문에 반드시 수행되어야 하며, 오류를 발생시킨 명령은 다시 시작된다. 이는 병렬로 발생할 수도 있다. 후속 변환은 TLB 적중을 유발하고 메모리 접근이 계속된다.
많은 아키텍처에서는 가상 기억 장치를 직접 하드웨어로 지원하는 "변환 색인 버퍼(TLB)"를 가지고 있다. TLB는 페이지와 프레임의 매핑을 저장하며, 가상 기억 장치 시스템을 완전히 소프트웨어로 구현한 경우에 비해 하드웨어에서의 페이지-프레임 변환을 고속화하여 전체 성능을 향상시킨다.
하지만, TLB는 일정 수의 페이지-프레임 매핑만 보존할 수 있다. 이를 소프트웨어적으로 확장하여 많은 매핑을 보존하는 것은 가상 기억 장치 시스템의 역할이다. 가상 기억 장치 시스템은 "페이지 테이블"을 사용하여 이를 수행한다.
가상 메모리를 지원하는 하드웨어는 이 주소를 TLB 내에서 검색한다. TLB는 이러한 검색을 병렬로 실행할 수 있도록 특별히 설계되었으며, 이 처리는 매우 빠르다. 페이지 번호와 일치하는 항목이 TLB에 있는 경우(TLB 히트), 물리 프레임 번호를 거기에서 가져와 오프셋을 더하여 메모리 접근이 계속된다. 그러나 일치하는 항목이 없는 경우(TLB 미스), 두 번째 단계의 처리로 페이지 테이블이 사용된다.
하드웨어가 가상 페이지에 해당하는 물리 프레임을 찾을 수 없는 경우, 페이지 폴트라고 불리는 프로세서 인터럽트를 발생시킨다. 운영 체제가 페이지 폴트를 처리하는 인터럽트 핸들러를 구현할 기회가 제공된다. 해당 핸들러는 페이지 테이블을 참조하여 주소의 매핑을 찾는다. 만약 매핑이 존재한다면, 이를 TLB에 기록하고 문제의 명령을 다시 실행함으로써 메모리 접근 처리가 재개된다.
2. 3. 페이지 폴트 (Page Fault)
메모리 관리 장치(MMU)가 페이지 테이블을 조회하는 과정에서 페이지 폴트가 발생할 수 있다. 페이지 폴트는 다음 두 가지 경우에 발생한다.- 가상 주소에 대한 번역이 없는 경우: 가상 주소가 유효하지 않은 경우이다. 이는 프로그래밍 오류로 인해 발생하며, 운영 체제는 문제가 있는 프로그램에 세그멘테이션 오류 신호를 보낸다.
- 요청된 페이지가 현재 물리 메모리에 없는 경우: 요청된 페이지가 페이징되어 보조 저장 장치(예: 하드 디스크)로 이동된 경우이다. 이 경우, 필요한 페이지를 보조 저장 장치에서 물리 메모리로 가져와야 한다(페이지 인).
물리 메모리가 가득 찬 경우, 페이지 교체 알고리즘에 따라 희생될 페이지를 선택하여 보조 저장 장치로 내보낸 후(페이지 아웃) 필요한 페이지를 가져온다. 이 과정에서 페이지 테이블과 TLB가 업데이트되고, 페이지 폴트를 발생시킨 명령이 다시 시작된다.
페이지 폴트는 페이지 테이블에 읽기 전용 비트가 설정된 페이지에 쓰기를 시도하거나, NX 비트가 설정된 페이지에서 코드를 실행하려 할 때도 발생할 수 있다. 이는 카피 온 라이트나 Write XOR Execute 같은 기능을 구현하는 데 사용된다.
3. 페이지 테이블 엔트리 (PTE)
페이지 테이블 엔트리(Page Table Entry, PTE)는 페이지 테이블의 레코드이다. PTE는 가상 메모리 주소를 물리적 메모리 주소로 변환하는 데 필요한 정보를 담고 있다.
PTE의 각 필드에는 일반적으로 다음 내용이 기록된다.[1][2]
- 페이지 기본 주소(Page base address): 페이지가 위치한 물리적 메모리의 시작 주소를 나타낸다.
- 플래그 비트: 페이지의 상태 및 접근 권한 등을 나타내는 여러 비트들로 구성된다.
- 접근 비트(Accessed bit): 해당 페이지에 접근이 있었는지를 나타낸다.
- 변경 비트(Dirty bit): 페이지 내용이 변경되었는지를 나타낸다. 더티 비트는 성능 최적화를 위해 사용된다. 페이지가 변경되지 않았다면 다시 디스크에 기록할 필요가 없어, 시간을 절약할 수 있다.
- 존재 비트(Present bit): 현재 페이지에 할당된 프레임이 있는지, 즉 페이지가 실제 메모리에 존재하는지 아니면 하드 디스크 드라이브(HDD)나 솔리드 스테이트 드라이브(SSD) 같은 보조 저장 장치에 있는지 나타낸다.
- 읽기/쓰기 비트(Read/Write bit): 페이지에 대한 읽기 및 쓰기 권한을 설정한다.
단일 주소 공간 운영체제가 아닌 운영 체제에서는 주소 공간 또는 프로세스 ID 정보도 PTE에 포함될 수 있다. 이는 가상 메모리 관리 시스템이 어떤 페이지를 어떤 프로세스에 연결해야 하는지 알려준다. 두 프로세스가 동일한 가상 주소를 서로 다른 목적으로 사용할 수 있기 때문에, 페이지 테이블은 서로 다른 가상 메모리 매핑을 제공해야 한다. 이를 위해 서로 다른 주소 맵 식별자를 할당하거나 프로세스 ID를 사용한다.
페이지 테이블 엔트리는 TLB(Translation Lookaside Buffer)에 기록될 수 있는 형식으로 구성되는 경우가 많다. 하드웨어 사양으로 TLB 엔트리에는 하드웨어가 사용하지 않는 비트가 있어, 소프트웨어가 페이지 테이블에 추가 정보를 저장할 수 있다.
4. 페이지 테이블의 종류
페이지 테이블에는 여러 유형이 있으며, 이는 다양한 요구 사항에 맞춰 최적화되어 있다. 기본적으로 페이지 테이블은 가상 주소와 이에 상응하는 물리 주소, 필요하다면 추가적인 주소 공간 정보를 저장해야 한다.[4]
32비트 워드 길이의 컴퓨터를 예로 들면, 주소 범위는 0x00000000부터 0xFFFFFFFF까지 4GiB가 된다. 이 주소 범위가 '''가상 주소 공간'''이 된다. 가상 기억 장치를 사용하지 않는 경우, 물리 메모리가 16MiB밖에 없다면 0x01000000 이상의 주소 범위는 유효하지 않은 주소가 된다. 그러나 많은 프로그램은 4GiB의 메모리를 한 번에 전부 사용하지는 않는다.(참조 지역성, 워킹 세트 참조)
4GiB의 주소 공간은 특정 크기의 덩어리(일반적으로 4KiB)로 분할된다. 이 덩어리를 "페이지"라고 부른다. 물리 메모리도 같은 크기로 분할되며, 이것을 "프레임"이라고 부른다. 가상 기억 장치 시스템은 가상 주소를 물리 주소로 변환하는 역할을 하며, 기본적으로 페이지를 프레임에 매핑한다. 페이지 테이블은 이 매핑 정보를 저장하는 데 사용된다.
많은 아키텍처에서는 변환 색인 버퍼(TLB)를 사용하여 하드웨어에서 페이지-프레임 변환을 가속화한다. 하지만 TLB는 저장 용량이 제한적이므로, 페이지 테이블을 사용하여 더 많은 매핑 정보를 관리한다.
"페이지"와 "프레임"이라는 명칭은 혼용되기도 하며, "가상 페이지", "물리 페이지" 또는 "페이지 프레임"이라고 부르기도 한다.[4]
4. 1. 역 페이지 테이블 (Inverted Page Table)
'''역 페이지 테이블'''(Inverted Page Table, IPT)은 시스템의 물리 메모리 프레임 수만큼 항목을 가지는 고정 크기 테이블이다. 각 항목은 해당 프레임에 매핑된 가상 페이지 정보를 저장한다. 즉, 페이지 테이블과 프레임 테이블을 하나의 데이터 구조로 결합한 것이다. 예를 들어, 4000개의 프레임이 있다면 역 페이지 테이블은 4000개의 행을 가진다. 각 행에는 다음 정보가 포함된다.- 가상 페이지 번호 (VPN)
- 실제 페이지 번호 (실제 주소는 아님)
- 기타 데이터 및 충돌 체인 생성 수단
IPT의 모든 항목을 검색하는 것은 비효율적이므로, 해시 테이블을 사용하여 가상 주소(필요한 경우 주소 공간/PID 정보 포함)를 IPT의 인덱스에 매핑한다. 이 해시 테이블은 ''해시 앵커 테이블''이라고 불린다. 해싱 함수는 일반적으로 커버리지보다는 속도를 위해 최적화된다. 해시 테이블에서는 충돌이 발생할 수 있으므로, 테이블의 각 항목에는 VPN이 제공되어 검색된 항목이 찾던 항목인지, 아니면 충돌인지 확인할 수 있다.
매핑 검색 시에는 해시 앵커 테이블이 사용된다. 항목이 없으면 페이지 폴트가 발생한다. 항목이 발견되면, 아키텍처에 따라 항목이 TLB에 다시 배치되고 메모리 참조가 다시 시작되거나, 충돌 체인을 따라가 페이지 폴트가 발생할 때까지 검색이 계속된다.
이러한 설계에서 가상 주소는 가상 페이지 번호와 페이지 오프셋, 두 부분으로 나뉜다.
역 페이지 테이블은 메모리 사용량을 줄일 수 있지만, 해시 함수로 인해 캐시 지역성이 부족하다는 단점이 있다. 트리 기반 설계는 인접한 페이지에 대한 페이지 테이블 항목을 인접한 위치에 배치하여 공간적 참조 지역성을 높이지만, 역 페이지 테이블은 항목을 분산시켜 공간적 참조 지역성을 저해한다. 운영 체제는 해시 테이블의 크기를 최소화하여 이 문제를 완화할 수 있지만, 이는 미스율 증가와 상쇄된다.
일반적으로 모든 프로세스가 공유하는 하나의 해시 테이블이 물리적 메모리에 연속적으로 존재한다. 프로세스별 식별자는 서로 다른 프로세스의 페이지를 구별하는 데 사용된다. 프로세스별 해시 테이블을 사용하는 방법도 있지만, 메모리 단편화 문제로 인해 실용적이지 않다.
역 페이지 테이블은 PowerPC, UltraSPARC, IA-64 아키텍처 등에서 사용된다.[4]
4. 2. 다단계 페이지 테이블 (Multilevel Page Table)
다단계 페이지 테이블은 메모리 사용량을 최적화하기 위해 페이지 테이블을 여러 단계로 구성하는 방식이다. 이는 가상 주소 공간 중 일부만 사용하는 경우, 해당 영역에 대해서만 페이지 테이블을 생성하여 메모리 낭비를 줄이는 데 효과적이다.프로세스를 실행할 때 가상 메모리의 최상위 부분(텍스트 및 데이터 세그먼트)과 최하위 부분(스택)이 주로 사용되고, 그 사이에는 사용되지 않는 영역이 있을 수 있다. 다단계 페이지 테이블은 이러한 점을 활용하여 메모리의 최상위 및 최하위 부분만 커버하는 작은 페이지 테이블들을 유지하고, 필요한 경우에만 새로운 페이지 테이블을 생성한다.
이러한 작은 페이지 테이블들은 마스터 페이지 테이블에 연결되어 트리 자료 구조를 형성한다. 이 구조는 2단계뿐만 아니라 여러 단계로 구성될 수 있다. 가상 주소는 루트 페이지 테이블의 인덱스, 하위 페이지 테이블의 인덱스, 그리고 해당 페이지 내의 오프셋으로 나뉜다.
예를 들어, x86 아키텍처에서는 2단계 또는 3단계 페이지 테이블 구조를 사용한다.
다단계 페이지 테이블은 "계층적 페이지 테이블"이라고도 불린다.
AMD64의 64비트 모드(4K 페이지)에서는 다단계 페이지 테이블을 통해 가상 주소를 물리 주소로 변환한다.
4. 3. 가상화 페이지 테이블 (Virtualized Page Table)
페이지 테이블을 가상 메모리에 배치하여 페이지 테이블 관리의 효율성을 높일 수 있다. 페이지 테이블은 가상 주소 공간의 모든 가상 페이지에 대한 매핑을 포함하므로 공간 낭비가 심하다. 하지만 페이지 테이블을 가상 메모리에 배치하고 가상 메모리 시스템이 페이지 테이블 메모리를 관리하도록 하면 이 문제를 해결할 수 있다.하지만 순환 페이지 부재를 방지하고 페이지 테이블에 존재하지 않는 페이지 테이블의 핵심 부분을 찾기 위해 선형 페이지 테이블 구조의 일부는 항상 물리적 메모리에 상주해야 한다. 32비트 시스템에서 4K 페이지, 페이지 테이블 엔트리가 32비트라면 4M바이트의 가상 공간을 페이지 테이블 매핑에 사용하게 된다.
가상화 페이지 테이블은 하드웨어가 페이지 테이블을 자동으로 참조하지 않는 경우에 TLB 미스 처리 속도를 높이는 수단으로 많이 사용된다. 예를 들어, MIPS 아키텍처에서 이것이 사용되고 있으며, SPARC에서도 유사한 기법이 사용되고 있다. 하지만 이 경우, 일부 페이지 테이블은 반드시 상주해야 한다. 그렇지 않으면 페이지 폴트의 연쇄가 발생한다. 즉, 페이지 폴트 핸들러 내에서 접근할 가능성이 있는 부분에서 페이지 폴트가 발생하면, 페이지 폴트가 해결되지 않아 시스템이 멈추게 된다.
아이테니엄(Itanium) 및 아이테니엄 2(Itanium2)에서는 다단 페이지 테이블을 전제로 하는 가상화 페이지 테이블과 역참조 페이지 테이블을 전제로 하는 가상화 해시 앵커 테이블을 지원하며, 운영 체제가 둘 중 하나를 선택하여 사용할 수 있다.[1]
5. 페이지 테이블과 루트킷
페이지 테이블은 운영체제의 핵심적인 부분이기 때문에, 이를 조작하여 악성 코드를 숨기는 루트킷 공격이 가능하다. 페이지 테이블 조작은 탐지가 어렵고, 시스템 보안에 심각한 위협을 초래할 수 있다.
참조
[1]
웹사이트
Virtual Memory
http://www.cs.umd.ed[...]
2015-09-28
[2]
웹사이트
Page Table Management
https://www.kernel.o[...]
2015-09-28
[3]
문서
"W^X - The Mechanism"
http://www.openbsd.o[...]
[4]
서적
Operating Systems Internals and Design Principles
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com